"""
日志工具模块
"""
import os
import logging
import logging.handlers
from datetime import datetime

def setup_logger(name, log_file=None, level=logging.INFO, max_bytes=10485760, backup_count=5):
    """
    设置日志记录器
    
    Args:
        name: 日志记录器名称
        log_file: 日志文件路径 (可选)
        level: 日志级别
        max_bytes: 单个日志文件最大字节数
        backup_count: 备份文件数量
    
    Returns:
        logging.Logger: 日志记录器
    """
    # 创建日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(level)
    
    # 清除现有的处理器
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
    
    # 创建格式化器
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 添加控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    
    # 如果提供了日志文件路径，添加文件处理器
    if log_file:
        # 确保日志目录存在
        log_dir = os.path.dirname(log_file)
        if log_dir and not os.path.exists(log_dir):
            os.makedirs(log_dir)
        
        # 添加滚动文件处理器
        file_handler = logging.handlers.RotatingFileHandler(
            log_file,
            maxBytes=max_bytes,
            backupCount=backup_count
        )
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)
    
    return logger

def get_app_logger(app_name='sync-tool', log_dir='logs'):
    """
    获取应用日志记录器
    
    Args:
        app_name: 应用名称
        log_dir: 日志目录
    
    Returns:
        logging.Logger: 日志记录器
    """
    # 确保日志目录存在
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    
    # 生成日志文件名
    log_file = os.path.join(log_dir, f"{app_name}.log")
    
    # 设置日志记录器
    return setup_logger(app_name, log_file)

def get_task_logger(task_id, log_dir='logs/tasks'):
    """
    获取任务日志记录器
    
    Args:
        task_id: 任务ID
        log_dir: 日志目录
    
    Returns:
        logging.Logger: 日志记录器
    """
    # 确保日志目录存在
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    
    # 生成日志文件名
    date_str = datetime.now().strftime('%Y%m%d')
    log_file = os.path.join(log_dir, f"task_{task_id}_{date_str}.log")
    
    # 设置日志记录器
    return setup_logger(f"task_{task_id}", log_file)

# 设置根日志记录器
root_logger = setup_logger('root')

# 设置应用日志记录器
app_logger = get_app_logger()